// 数组排序

const ages = [ 6, 7, 8, 9, 1, 2, 3, 4, 5 ];

console.log( ages.join() );

// Array.prototype.sort([compareFn])
// 参数: 参数是可选的，若显式指定了参数，则参数必须是个返回数值的函数
// 作用: 按照参数指定的比较函数对数组原地排序
//      若未显式指定参数，对于数字来说则按照从小到大排列；对于字符串来说则按照Unicode位点进行排序
// 返回: 返回排序后的数组(即原来的数组)
ages.sort( () => Math.random() - 0.5 );
console.log( ages.join() );

// 因为没有显式为 sort 传入参数，则默认对数组中的数字按照从小到大排列
let x = ages.sort();
console.log( x === ages ); // true
console.log( ages.join() );

ages.sort( (a,b) => b - a );
console.log( ages.join() );

console.log( '= '.repeat(30) );

const students = [
    { id: 9527, name: '华安', gender: '男' },
    { id: 8526, name: '秋香', gender: '女' },
    { id: 1024, name: '华文', gender: '男' },
    { id: 2048, name: '华武', gender: '男' },
    { id: 7777, name: '武状元', gender: '男' },
    { id: 6666, name: '石榴姐', gender: '女' }
];

// 约定:
// 当第一个参数大于、等于、小于第二个参数时，
// 分别返回大于零、等于零、小于零的数字
function compare(a, b){
    if( typeof a.id === 'number' && typeof b.id === 'number' ){
        return a.id - b.id ;
    }
    return 0;
}

// 对学生数组进行整体排序
students.sort( compare );

console.log( students );